home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / networking / amitcp / httpd.lha / httpd / amiga.c next >
Encoding:
C/C++ Source or Header  |  1994-06-18  |  1.9 KB  |  138 lines

  1. /* level 2 I/O functions that will work with sockets or files */
  2.  
  3. #include <stdio.h>
  4. #include <stdarg.h>
  5. #include <string.h>
  6. #include <bsdsocket.h>
  7.  
  8. /* assume that we won't have more than 4096 sockets,
  9.  *  & that FILE* must be greater than 4095             */
  10.  
  11. #define IS_SOCKET(x) (!(((ULONG)x)&0xfffff000))
  12.  
  13. /* socket or file replacement for fprintf */
  14.  
  15. int
  16. __SaFprintf( FILE * fd, char * template, ... )
  17. {
  18.     va_list arglist;
  19.     int length;
  20.  
  21.     va_start( arglist, template );
  22.  
  23.     if( IS_SOCKET( fd ) )
  24.     {
  25.         char buffer[8092];
  26.  
  27.         length = vsprintf( buffer, template, arglist );
  28.  
  29.         send( (int)fd, buffer, length, NULL );
  30.     }
  31.     else
  32.         length = vfprintf( fd, template, arglist );
  33.  
  34.     va_end( arglist );
  35.  
  36.     return( length );    
  37. }
  38.  
  39. int
  40. __SaFwrite( char * buffer, size_t length, size_t n, FILE * fd )
  41. {
  42.     int ret;
  43.  
  44.     if( IS_SOCKET( fd ) )
  45.     {
  46.         if( length == 1 )
  47.         {
  48.             length = n;
  49.             n = 1;
  50.         }
  51.  
  52.         ret = (send( (int)fd, buffer, length, NULL ) == length);
  53.     }
  54.     else
  55.         ret = fwrite( buffer, length, n, fd );
  56.  
  57.     return( ret );
  58. }
  59.  
  60. int
  61. __SaFputs( char * string, FILE * fd )
  62. {
  63.     int ret;
  64.  
  65.     if( IS_SOCKET( fd ) )
  66.     {
  67.         int length = strlen( string );
  68.  
  69.         ret = (send( (int)fd, string, length, NULL ) == length) ?
  70.                 0 : EOF;
  71.     }
  72.     else
  73.         ret = fputs( string, fd );
  74.  
  75.     return( ret );
  76. }
  77.  
  78. int
  79. __SaFputc( char  byte, FILE * fd )
  80. {
  81.     int ret;
  82.  
  83.     if( IS_SOCKET( fd ) )
  84.         ret = (send( (int)fd, &byte, 1, NULL ) == 1) ?
  85.                 byte : EOF;
  86.     else
  87.         ret = fputc( byte, fd );
  88.  
  89.     return( ret );
  90. }
  91.  
  92. int
  93. __SaFclose( FILE * fd )
  94. {
  95.     int ret;
  96.  
  97.     if( IS_SOCKET( fd ) )    
  98.         ret = CloseSocket( (int)fd );
  99.     else
  100.         ret = fclose( fd );
  101.  
  102.     return( ret );
  103. }
  104.  
  105. int
  106. __SaFflush( FILE * fd )
  107. {
  108.     int ret;
  109.  
  110.     if( ! IS_SOCKET( fd ) )    
  111.         ret = fflush( fd );
  112.  
  113.     return( ret );
  114. }
  115.  
  116. /* Dummy alarm function */
  117.  
  118. void
  119. alarm( int timeout )
  120. {
  121. }
  122.  
  123. /* Dummy getpid function */
  124.  
  125. int
  126. getpid( void )
  127. {
  128.     return( 0 );
  129. }
  130.  
  131. /* Dummy crypt function */
  132.  
  133. char *
  134. crypt( char * sent, char * real )
  135. {
  136.     return( sent );
  137. }
  138.